[OTLP] Limit response body size read by exporters#7017
[OTLP] Limit response body size read by exporters#7017martincostello merged 9 commits intoopen-telemetry:mainfrom
Conversation
Limit the length of the HTTP response body that is read if export fails for gRPC or HTTP. See open-telemetry/opentelemetry-proto#781.
Add PR number.
Codecov Report❌ Patch coverage is Additional details and impacted files@@ Coverage Diff @@
## main #7017 +/- ##
==========================================
- Coverage 88.87% 88.78% -0.09%
==========================================
Files 263 263
Lines 12424 12451 +27
==========================================
+ Hits 11042 11055 +13
- Misses 1382 1396 +14
Flags with carried forward coverage won't be shown. Click here to find out more.
|
There was a problem hiding this comment.
Pull request overview
Limits the amount of HTTP response body read (for error logging) when OTLP export fails, aligning exporter behavior with updated OTLP guidance.
Changes:
- Add size-capped response-body reading helper (
TryGetResponseBody) and unit tests for truncation/edge cases. - Avoid reading the response body unless EventSource error logging is enabled (HTTP and gRPC exporters).
- Update exporter changelog to document the behavioral change.
Reviewed changes
Copilot reviewed 5 out of 5 changed files in this pull request and generated 5 comments.
Show a summary per file
| File | Description |
|---|---|
| test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/OtlpExportClientTests.cs | Adds tests validating TryGetResponseBody behavior, including truncation and exception handling. |
| src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/ExportClient/OtlpHttpExportClient.cs | Gates response-body reading on EventSource being enabled to avoid unnecessary work. |
| src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/ExportClient/OtlpGrpcExportClient.cs | Same gating for gRPC; minor refactor to expression-bodied helper. |
| src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/ExportClient/OtlpExportClient.cs | Implements capped response-body reading and refactors SendHttpRequest to expression-bodied form. |
| src/OpenTelemetry.Exporter.OpenTelemetryProtocol/CHANGELOG.md | Documents the new response-body read limiting behavior. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/OtlpExportClientTests.cs
Show resolved
Hide resolved
...OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/ExportClient/OtlpExportClient.cs
Outdated
Show resolved
Hide resolved
...OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/ExportClient/OtlpExportClient.cs
Outdated
Show resolved
Hide resolved
...OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/ExportClient/OtlpExportClient.cs
Outdated
Show resolved
Hide resolved
test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/OtlpExportClientTests.cs
Show resolved
Hide resolved
Fix test method name.
- Eagerly read until no more data or limit reached. - Read bytes and convert to string respecting encoding. - Avoid reading content if `CancellationToken` is signalled.
Update limit from 32KiB to 4MiB.
When targeting .NET, rent a buffer rather than allocate.
Add a test that verifies the behaviour if the content is compressed.
...OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/ExportClient/OtlpExportClient.cs
Outdated
Show resolved
Hide resolved
Move `ArrayPool<T>.Return(...)` call into `finally`.
...OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/ExportClient/OtlpExportClient.cs
Show resolved
Hide resolved
Add a suffix of `[TRUNCATED]` if the response body is truncated.
|
I'll merge this once open-telemetry/opentelemetry-proto#781 is merged, just in case there's any last-minute changes. |
|
The documentation change hasn't been merged yet, but both Go and Kotlin have merged the equivalent PRs, so I think we're good to merge this. |
See open-telemetry/opentelemetry-proto#781.
Changes
Limit the length of the HTTP response body that is read if export fails for gRPC or HTTP.
Merge requirement checklist
CHANGELOG.mdfiles updated for non-trivial changesChanges in public API reviewed (if applicable)